import tempfile
import importlib.util
import os
import sys

def evaluate(program_code: str) -> dict:
    """
    通过运行给定的程序代码并捕获其输出来评估它。
    目标是最小化 run() 函数的返回值。
    """
    with tempfile.NamedTemporaryFile(mode="w", suffix=".py", delete=False, encoding="utf-8") as tmp_file:
        tmp_file.write(program_code)
        tmp_file_path = tmp_file.name

    try:
        # 将生成的代码作为模块导入
        spec = importlib.util.spec_from_file_location("evolved_module", tmp_file_path)
        evolved_module = importlib.util.module_from_spec(spec)
        sys.modules["evolved_module"] = evolved_module
        spec.loader.exec_module(evolved_module)
        
        # 运行函数并获取分数
        result = evolved_module.run()
        
        # 我们想要最小化结果，所以 main_score 就是结果本身。
        # 在一个最大化问题中，你可能会返回 -result。
        return {"main_score": result}
    except Exception as e:
        # 生成的代码可能有错误
        print(f"评估失败: {e}")
        return None
    finally:
        os.remove(tmp_file_path)